package com.woniuxy.carrental.service.impl;

import com.woniuxy.carrental.entity.*;
import com.woniuxy.carrental.mapper.*;
import com.woniuxy.carrental.service.DetailsService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author author
 * @create 2021-10-06 23:57
 * 新增业务：点击入库后将该订单的状态由true改为false
 */
@Service
public class DetailsServiceImpl implements DetailsService {
    //获取mapper的实例
    @Resource
    DetailsMapper detailsMapper;

    @Resource
    PurchaseMapper purchaseMapper;

    @Resource
    CarMapper carMapper;
    //新增数据--向仓库表单中添加数据

    @Resource
    CarpartMapper carpartMapper;

    @Resource
    WatypeMapper watypeMapper;

    @Resource
    WareingMapper wareingMapper;

    //获得前端的purchase_id去采购表中获取数据 再存储到仓库表单中去 再修改采购表单的状态
    @Override
    public List<Purchase> insertDe(String purchase_id) {
        Details details=new Details();

//1：根据purchase_id 查询purchase表中数据
        Purchase purchase = purchaseMapper.selectPuByid(purchase_id);

               //当汽车列姓名为空时
                if(purchase.getCar_name()==null){
                    //拿到汽配的名称
                    String carpart_name = purchase.getCarpart_name();
                    //拿到汽配的数量
                    Integer part_count = purchase.getPart_count();
                    //根据汽配的名称查询汽配详情表单
                    Carpart carpart = carpartMapper.selectByName(carpart_name);
                    String carpart_picture = carpart.getCarpart_picture();//图片
                    String carpart_vehicle = carpart.getCarpart_vehicle();//型号
                    //获取类型
                    String carpart_type = carpart.getCarpart_type();
                    //根据类型去查询类型表单中是否存在 拿到类型id 没有该类型就向类型表单中添加类型再拿到id
                    if(watypeMapper.selectWatype(carpart_type)==null){
                        Watype watype=new Watype();
                        watype.setWatypename(carpart_type);
                        watypeMapper.insertWatype(watype);
                        Watype watype1 = watypeMapper.selectWatype(carpart_type);
                        //拿到类型id
                        Integer watypeid = watype1.getWatypeid();
                        //存入仓库类型id
                        details.setWatypeid(watypeid);

                        //数据库有该类型直接拿到id存入
                    }else{
                        Watype watype = watypeMapper.selectWatype(carpart_type);
                        Integer watypeid = watype.getWatypeid();
                        details.setWatypeid(watypeid);
                    }

                    //存入汽配的数量
                    //details.setDecount(part_count);
                    //存入汽配的名称
                    details.setDename(carpart_name);
                    //if判断中已经存入类型id
                    //输入图片地址
                    details.setDeimg(carpart_picture);
                    //输入型号
                    details.setDebrand(carpart_vehicle);

                    //添加仓库的时候应该先根据名称查询表中数据是否存在 存在的话就数量上修改 不存在就添加
                    //根据名称查询数据库中是否存在相同数据
       if(detailsMapper.selectByName(carpart_name)==null){
           //存入汽配的数量
           details.setDecount(part_count);
           //当表中没有数据时添加至仓库
           detailsMapper.addDetails(details);

           //当数据库中存在相同数据 修改他的数量
       }else {
           //获取仓库中原本的数量
           Details details1 = detailsMapper.selectByName(carpart_name);
           Integer decount = details1.getDecount();

           //得出新的数量
        int newCount=decount+part_count;
           //修改表中数据数量
        detailsMapper.updataCountByName(newCount,carpart_name);

       }


                    //添加至仓库的同时添加入库记录表单
                    Wareing wareing=new Wareing();
                    wareing.setWareingcount(part_count);
                    wareing.setWareingdata(DateUtil.data());
                    //使用UUID
                    wareing.setWareingid(CommonUtil.uuid());
                    wareing.setWareingname(carpart_name);
                    wareing.setWareingstate("入库");
                    wareingMapper.addWareing(wareing);



                    //当汽车列姓名不为空时
                }else{
                    //获取汽车的名称
                    String car_name = purchase.getCar_name();

                    //根据汽车名称查询汽车详情表单
                    Car car = carMapper.selectCarByName(car_name);
                    //获取类型
                    String car_type = car.getCar_type();
        //根据类型去查询类型表单中是否存在 拿到类型id 没有该类型就向类型表单中添加类型再拿到id
                    if(watypeMapper.selectWatype(car_type)==null){
                        Watype watype=new Watype();
                        watype.setWatypename(car_type);
                        watypeMapper.insertWatype(watype);
                        Watype watype1 = watypeMapper.selectWatype(car_type);
                        //拿到类型id
                        Integer watypeid = watype1.getWatypeid();
                        //存入仓库类型id
                        details.setWatypeid(watypeid);

                        //数据库有该类型直接拿到id存入
                    }else{
                        Watype watype = watypeMapper.selectWatype(car_type);
                        Integer watypeid = watype.getWatypeid();
                        details.setWatypeid(watypeid);
                    }

                    //获取汽车的数量
                    Integer car_count = purchase.getCar_count();
                    //获取图片
                    String car_picture = car.getCar_picture();
                    //获取型号
                    String car_vehicle = car.getCar_vehicle();

                    //将拿到的汽车数量输入到仓库属性
                   // details.setDecount(car_count);
                    //将拿到的汽车名称输入到仓库属性
                    details.setDename(car_name);
                    //输入类型id在if判断语句中得到
                    //输入图片地址
                    details.setDeimg(car_picture);
                    //输入型号
                    details.setDebrand(car_vehicle);


                    //添加仓库的时候应该先根据名称查询表中数据是否存在 存在的话就数量上修改 不存在就添加
                    //根据名称查询数据库中是否存在相同数据
                    if(detailsMapper.selectByName(car_name)==null){
                        //存入汽配的数量
                        details.setDecount(car_count);

                        //添加至仓库
                        detailsMapper.addDetails(details);
                        //当数据库中存在相同数据 修改他的数量
                    }else {
                        //获取仓库中原本的数量
                        Details details2 = detailsMapper.selectByName(car_name);
                        Integer decount = details2.getDecount();

                        //得出新的数量
                        int newCount=decount+car_count;
                        //修改仓库中数据的数量
                        detailsMapper.updataCountByName(newCount, car_name);
                    }


                    //添加至仓库的同时添加入库记录表单
                    Wareing wareing=new Wareing();
                    wareing.setWareingcount(car_count);
                    wareing.setWareingdata(DateUtil.data());
                    //使用UUID
                    wareing.setWareingid(CommonUtil.uuid());
                    wareing.setWareingname(car_name);
                    wareing.setWareingstate("入库");
                    wareingMapper.addWareing(wareing);

                }

        //入库后将该条数据的状态由true改为false
      purchaseMapper.updataByState(purchase_id);
    //修改数据状态后 再次查询表单中的数据 使数据得到更新将查询到的数据返回回去
        List<Purchase> purchases = purchaseMapper.selectAllBytrue();

return purchases;
    }

    //分页查询数据
    @Override
    public ResponseResult<PageBean<Details>> selectDetailsByPageService(Details details, int pageIndex, int pageSize) {
        PageBean<Details> pageBean = new PageBean<>();
        List<Details> details1 = detailsMapper.selectDetailsByPage(details, pageIndex, pageSize);
        //得到表中数据的总条数
        int i1 = detailsMapper.selectCountDetailsByPage(new Details());
        pageBean.setBeanList(details1);
        pageBean.setPageIndex(pageIndex);
        pageBean.setPageSize(pageSize);
        pageBean.setTotalRecord(i1);
        return new ResponseResult<PageBean<Details>>(pageBean,200,"nice");
    }

    @Override
    public List<Details> selectAllService() {

        return detailsMapper.selectAllMapper();
    }
}
